package com.jt.project;

import com.jt.JedisDataSource;
import redis.clients.jedis.Jedis;

import java.util.Set;

/**
 * 基于某个活动，设计一个简易的投票系统
 * 1）活动 唯一标识是活动id
 * 2）基于活动进行投票
 * 2.1）同一个用户只能投票1次（不允许匿名投票）
 * 2.2）假如已经参与过投票，再投票就是取消投票
 * 2.3）可以查看总票数，谁参与(用户id)过这个活动的投票
 * */
public class VoteDemo01 {
    public static void main(String[] args) {
        //1.定义活动
        String activityId = "101";
        //2.定义参与活动的用户
        String user1 = "2001";
        String user2 = "2002";
        String user3 = "2003";
        //3.执行用户投票操作
        boolean flag1 = doVote(activityId,user1);
        boolean flag2 = doVote(activityId,user2);
        boolean flag3 = doVote(activityId,user3);
        boolean flag4 = doVote(activityId,user1);
        //4.查看投票总数
        Long count = doCount(activityId);
        System.out.println(activityId+"的总投票数:"+count);
        //5.查看哪些用户参与了投票
        Set<String> userIds = doGetUsers(activityId);
        System.out.println("参与这个活动的用户为:"+userIds);
    }

    static Set<String> doGetUsers(String activityId) {
        Jedis jedis = JedisDataSource.getConnection();
        Set<String> members = jedis.smembers(activityId);
        jedis.close();
        return members;
    }

    static Long doCount(String activityId) {
        Jedis jedis = JedisDataSource.getConnection();
        Long count = jedis.scard(activityId);
        jedis.close();
        return count;
    }



    static boolean doVote(String activityId, String userId) {
        //1.参数校验(自己玩)
        //2.执行投票
        //2.1建立与redis的连接
        Jedis jedis = JedisDataSource.getConnection();
        //2.2编写投票逻辑(基于set集合类型存储投票信息)
        Boolean flag = jedis.sismember(activityId, userId);
        if (flag) {//true标识已经投过票,此时要取消已的票
            jedis.srem(activityId,userId);
            flag = false;
        }else {//没有投票过票,则执行投票
            jedis.sadd(activityId,userId);
            flag = true;
        }
        //2.3释放资源
        jedis.close();
        //3.返回结果
        return flag;
    }




}
